package com.single;

/**
 * @author cyf
 * @description 单例模式
 * @create 2018-09-20 17:54
 **/
public class SingleTon5 {


    /**
     *  静态内部类实现; 好处： 延迟加载， 线程安全。JVM 保证实例化一次
     *
     *  原因：
     *
     *  类在加载SingleTon5 的时候，SingleTonManager 静态资源没有被加载进内存
     *  只有当 getInstance(); 调用这个方法的时候 SingleTonManager 才会被加载，并实例化 instance
     *  并且 JVM 保证 instance 被实例化一次
     *
     */
    private SingleTon5() {
    }

    private static class SingleTonManager{
        private static final SingleTon5 INSTANCE = new SingleTon5();
    }

    public static SingleTon5 getInstance() {
        return SingleTonManager.INSTANCE;
    }

    public static void main(String[] args) {
        SingleTon5 instance = SingleTon5.getInstance();
        SingleTon5 instance1 = SingleTon5.getInstance();
        System.out.println(instance == instance1);
    }

}
